var http = require("http");
var fs = require("fs");
var cheerio = require("cheerio");
var request = require("request");
var i = 0;
var url = "http://www.ss.pku.edu.cn/index.php/newscenter/news/2391";
//初始url

function fetchPage(x) {
  //封装了一层函数
  startRequest(x);
}

function startRequest(x) {
  //采用http模块向服务器发起一次get请求
  http
    .get(x, function(res) {
      var html = ""; //用来存储请求网页的整个html内容
      var titles = [];
      res.setEncoding("utf-8"); //防止中文乱码
      //监听data事件，每次取一块数据
      res.on("data", function(chunk) {
        html += chunk;
      });
      //监听end事件，如果整个网页内容的html都获取完毕，就执行回调函数
      res.on("end", function() {
        var $ = cheerio.load(html); //采用cheerio模块解析html

        var time = $(".article-info a:first-child")
          .next()
          .text()
          .trim();

        var news_item = {
          //获取文章的标题
          title: $("div.article-title a")
            .text()
            .trim(),
          //获取文章发布的时间
          Time: time,
          //获取当前文章的url
          link:
            "http://www.ss.pku.edu.cn" + $("div.article-title a").attr("href"),
          //获取供稿单位
          author: $("[title=供稿]")
            .text()
            .trim(),
          //i是用来判断获取了多少篇文章
          i: (i = i + 1)
        };

        console.log(news_item); //打印新闻信息
        var news_title = $("div.article-title a")
          .text()
          .trim();

        savedContent($, news_title); //存储每篇文章的内容及文章标题

        savedImg($, news_title); //存储每篇文章的图片及图片标题

        //下一篇文章的url
        var nextLink = "http://www.ss.pku.edu.cn" + $("li.next a").attr("href");
        str1 = nextLink.split("-"); //去除掉url后面的中文
        str = encodeURI(str1[0]);
        //这是亮点之一，通过控制I,可以控制爬取多少篇文章.
        if (i <= 500) {
          fetchPage(str);
        }
      });
    })
    .on("error", function(err) {
      console.log(err);
    });
}
//该函数的作用：在本地存储所爬取的新闻内容资源
function savedContent($, news_title) {
  $(".article-content p").each(function(index, item) {
    var x = $(this).text();

    var y = x.substring(0, 2).trim();

    if (y == "") {
      x = x + "\n";
      //将新闻文本内容一段一段添加到/data文件夹下，并用新闻的标题来命名文件
      fs.appendFile("./data/" + news_title + ".txt", x, "utf-8", function(err) {
        if (err) {
          console.log(err);
        }
      });
    }
  });
}
//该函数的作用：在本地存储所爬取到的图片资源
function savedImg($, news_title) {
  $(".article-content img").each(function(index, item) {
    var img_title = $(this)
      .parent()
      .next()
      .text()
      .trim(); //获取图片的标题
    if (img_title.length > 35 || img_title == "") {
      img_title = "Null";
    }
    var img_filename = img_title + ".jpg";

    var img_src = "http://www.ss.pku.edu.cn" + $(this).attr("src"); //获取图片的url

    //采用request模块，向服务器发起一次请求，获取图片资源
    request.head(img_src, function(err, res, body) {
      if (err) {
        console.log(err);
      }
    });
    request(img_src).pipe(
      fs.createWriteStream("./image/" + news_title + "---" + img_filename)
    ); //通过流的方式，把图片写到本地/image目录下，并用新闻的标题和图片的标题作为图片的名称。
  });
}
fetchPage(url); //主程序开始运行
